'''
给你一个整数数组 nums ，数组中的元素 互不相同 。返回该数组所有可能的子集（幂集）。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

 

示例 1：

输入：nums = [1,2,3]
输出：[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/subsets
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
'''
class Solution(object):
    def subsets(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        n = len(nums)
        res = []
        nums.sort()  # sort the nums to find the equivalent nums

        def helper(i, temp):
            res.append(temp)
            for j in range(i, n):
                if j > i and nums[j] == nums[j - 1]:
                    continue  # pass the same number
                else:
                    helper(j + 1, temp + [nums[j]])  # search along the tree

        helper(0, [])  # trigger the process

        return res

nums = [1,2,2]
Solution().subsets(nums)